package ejb.casacentral.persistence.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Generated;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;



@Entity
@Table
@NamedQueries({
		@NamedQuery(name ="SolicitudCompra.todas",query="select s from SolicitudCompra s "),
		@NamedQuery(name ="SolicitudCompra.completa",query="select s from SolicitudCompra s where s.estado = 'completa'"),
		@NamedQuery(name ="SolicitudCompra.pendientes",query="select s from SolicitudCompra s where s.estado = 'pendiente'"),
		@NamedQuery(name ="SolicitudCompra.porCodigo",query="select s from SolicitudCompra s where s.codigo = :codigo"),
		@NamedQuery(name ="SolicitudCompra.porCodigos",query="select s from SolicitudCompra s where s.codigo in (:codigos)")
})
public class SolicitudCompra implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5289140764181353312L;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private long codigo;
	@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
	@JoinColumn(name="idSolicitud",referencedColumnName="codigo")
	private List<ItemRodamiento> rodamientos = new ArrayList<ItemRodamiento>();
	@Column
	private Date fechaRecepcion;
	@ManyToOne(cascade=CascadeType.ALL)
	private OficinaVenta oficinaVenta;
	@Column
	private String estado;
	@OneToMany(cascade=CascadeType.ALL)
	private List<OrdenCompra> ordenes;
	
	@Override
	public String toString() {
		return "SolicitudCompra [codigo=" + codigo + ", rodamientos="
				+ rodamientos + ", fechaRecepcion=" + fechaRecepcion
				+ ", oficinaVenta=" + oficinaVenta + ", estado=" + estado
				+ ", ordenes=" + ordenes + "]";
	}
	public long getCodigo() {
		return codigo;
	}
	public void setCodigo(long codigo) {
		this.codigo = codigo;
	}
	public List<ItemRodamiento> getRodamientos() {
		return rodamientos;
	}
	public void setRodamientos(List<ItemRodamiento> rodamientos) {
		this.rodamientos = rodamientos;
	}
	public Date getFechaRecepcion() {
		return fechaRecepcion;
	}
	public void setFechaRecepcion(Date fechaRecepcion) {
		this.fechaRecepcion = fechaRecepcion;
	}
	public OficinaVenta getOficinaVenta() {
		return oficinaVenta;
	}
	public void setOficinaVenta(OficinaVenta oficinaVenta) {
		this.oficinaVenta = oficinaVenta;
	}
	public String getEstado() {
		return estado;
	}
	public void setEstado(String estado) {
		this.estado = estado;
	}
	public List<OrdenCompra> getOrdenes() {
		return ordenes;
	}
	public void setOrdenes(List<OrdenCompra> ordenes) {
		this.ordenes = ordenes;
	}
	
	public SolicitudCompra(long codigo, List<ItemRodamiento> rodamientos,
			Date fechaRecepcion, OficinaVenta oficinaVenta, String estado,
			List<OrdenCompra> ordenes) {
		super();
		this.codigo = codigo;
		this.rodamientos = rodamientos;
		this.fechaRecepcion = fechaRecepcion;
		this.oficinaVenta = oficinaVenta;
		this.estado = estado;
		this.ordenes = ordenes;
	}
	public SolicitudCompra() {
		super();
	}
	public void chequearEstado() {
		if(!ordenes.isEmpty()){
			String estado = "Completa";
			for (OrdenCompra orden : ordenes) {
				if (orden.getEstado().equals("Envidada")){
					estado = "Pendiente";
				}
			}
			this.estado = estado;
		}
		
	}
	
	public void addRodamiento(ItemRodamiento ir) {
		if(this.rodamientos==null){
			rodamientos = new ArrayList<ItemRodamiento>();
		}
		
		rodamientos.add(ir);
		
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (codigo ^ (codigo >>> 32));
		result = prime * result + ((estado == null) ? 0 : estado.hashCode());
		result = prime * result
				+ ((fechaRecepcion == null) ? 0 : fechaRecepcion.hashCode());
		result = prime * result
				+ ((oficinaVenta == null) ? 0 : oficinaVenta.hashCode());
		result = prime * result + ((ordenes == null) ? 0 : ordenes.hashCode());
		result = prime * result
				+ ((rodamientos == null) ? 0 : rodamientos.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		SolicitudCompra other = (SolicitudCompra) obj;
		if (codigo != other.codigo)
			return false;
		if (estado == null) {
			if (other.estado != null)
				return false;
		} else if (!estado.equals(other.estado))
			return false;
		if (fechaRecepcion == null) {
			if (other.fechaRecepcion != null)
				return false;
		} else if (!fechaRecepcion.equals(other.fechaRecepcion))
			return false;
		if (oficinaVenta == null) {
			if (other.oficinaVenta != null)
				return false;
		} else if (!oficinaVenta.equals(other.oficinaVenta))
			return false;
		if (ordenes == null) {
			if (other.ordenes != null)
				return false;
		} else if (!ordenes.equals(other.ordenes))
			return false;
		if (rodamientos == null) {
			if (other.rodamientos != null)
				return false;
		} else if (!rodamientos.equals(other.rodamientos))
			return false;
		return true;
	}
	
	
	
	
	
	


}
